﻿using S7.Net.Types;
using S7.Net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace S7NetManager
{
    public static class DataItemExtension
    {
        public static DataItem SetValue(this DataItem dataItem,object value)
        {
            dataItem.Value = value;
            return dataItem; 
        }

        public static DataItem ParseAndSetValue(this DataItem dataItem, string value)
        {
            switch (dataItem.VarType)
            {
                case VarType.Byte:
                    dataItem.SetValue( byte.Parse(value));
                    return dataItem;
                case VarType.DWord:
                    dataItem.SetValue(uint.Parse(value));
                    return dataItem;
                case VarType.DInt:
                    dataItem.SetValue(int.Parse(value));
                    return dataItem;
                case VarType.Real:
                    dataItem.SetValue(float.Parse(value));
                    return dataItem;
                case VarType.Word:
                    dataItem.SetValue(ushort.Parse(value));
                    return dataItem;
                case VarType.Int:
                    dataItem.SetValue(short.Parse(value));
                    return dataItem;
                case VarType.String:               
                    dataItem.SetValue(value);
                    return dataItem;
                case VarType.Bit:
                    dataItem.SetBitValue (bool.Parse(value));
                    return dataItem;
                default:
                    return dataItem;
            }
        }

        public static DataItem SetBitAddress(this DataItem dataItem,byte bitAddr)
        {
            dataItem.BitAdr = bitAddr;
            return dataItem;
        }

        public static DataItem SetBitValue(this DataItem dataItem, bool value)
        {
            dataItem.Value = value;
            return dataItem;
        }

        public static string Dump(this DataItem dataItem)
        {
            return $"DataType: {dataItem.DataType}, DB:{dataItem.DB},ValType: {dataItem.VarType},StartByteAddr:{dataItem.StartByteAdr}, BitAddr:{dataItem.BitAdr},Count:{dataItem.Count},Value:{dataItem.Value}";
        }
    }
}
